<?php
/**
 * 功能：auth_rule表模型
 * 作者：魏安来
 * 日期：2017/01/16
 */

namespace app\index\model;
use think\Model;
use think\Db;

class AuthRule extends Model {

	/**
	 * 查找所有排序后的权限，即一级后面跟的是二级权限的数据，以此类推
	 * @return array $ruleArr 排序后的权限数据
	 */
	public function getAllRule() {
		$data = Db::name('auth_rule')->select();
		$ruleArr = $this->ruleSort($data);
		return $ruleArr;
	}

	/**
	 * 权限规则排序
	 * @param array $data 需要排序的数据
	 * @param int 	$pid 上级权限id
	 * @param int 	$level 权限级别
	 * @return array $tempArr 排序后的权限数据
	 */
	public function ruleSort($data, $pid=0, $level = 0){
		//注意此处为递归，需要声明静态数组，否则会被初始化
		static	$tempArr = array();
		foreach ($data as $k=>$v) {
			if ($pid == $v['pid']) {
				$tempArr[$k] = $v;
				$tempArr[$k]['level'] = $level + 1;
				$this->ruleSort($data, $v['id'], $tempArr[$k]['level']);
			}
		}
		return $tempArr;
	}

	/**
	 * 根据传入的ID获取一条权限规则数据
	 * @param int $id 权限id
	 * @return 一条权限数据结果集
	 */
	public function getOneRuleData($id) {
		return Db::name('auth_rule')->where('id', $id)->find();
	}

	/**
	 * 根据ID和$data更新一条权限规则数据
	 * @param int 	$id 菜单id
	 * @param array $data 菜单数据
	 * @return int $affected 受影响的行数
	 */
	public function updataOneRuleData($id, $data) {
		$affected = Db::name('auth_rule')->where('id', $id)->update($data);
		return $affected;
	}

	/**
	 * 根据ID删除权限规则数据
	 * @param int $id 权限id
	 * @return int $affected 受影响的行数
	 */
	public function deleteRule($id) {
		static $affected = 0;
		//查找子权限，先删除子权限，再删除这个权限规则
		$result = Db::name('auth_rule')->where('pid', $id)->select();
		if ($result) {
			foreach($result as $v){
				//递归删除
				$affected += Db::name('auth_rule')->delete($id);
				$this->deleteMenu($v['id']);
			}
		} else {
			//如果没有子权限，直接根据主键id删除
			$affected += Db::name('auth_rule')->delete($id);
		}
		return $affected;
	}

}

?>